package com.yms.string;

/**
 * @version : 1.0
 * @author: yangmingsong
 * @date: 2022/7/9-07-09-17:47
 * @description: spring5Test
 */
public class InternTestStringConstantPool {
    public static void main(String[] args) {
        String s1 = new StringBuilder().append("计算机").append("软件").toString();
        String intern = s1.intern();
        System.out.println(s1==s1.intern());
        String s2 = new StringBuilder().append("ja").append("va").toString();
        String intern1 = s2.intern();
        System.out.println(s2==s2.intern());
        // char[3]@549
        char[] chars = {'a','b','c'};
        String a = new String(chars, 0, 3);
        // char[3]@553 经过jclasslib分析，"abc"并不存在于字符串常量池中
        String intern2 = a.intern();
        //jdk1.8中内存地址也是char[3]@553，表明如果字符串常量池中没有这个字符串，并不会在字符串常量池中创建,而是一种地址引用
        System.out.println(a == intern2);
        // true
        String s = "abc";
        //如果s的内存地址与Intern2相同，则会创建 ，在字符串常量池中存在"abc"的引用，那么就不会再次创建，而是指向这个引用，所以此时的"abc"其实还是存在于堆空间中
        System.out.println(s == a);

    }
}
